home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #2 / Monster Media No. 2 (Monster Media)(1994).ISO / utils1 / 2m21src.zip / 2M-INFO.PAS < prev    next >
Pascal/Delphi Source File  |  1994-05-31  |  37KB  |  835 lines

  1.  
  2. (*********************************************************************
  3. *                                                                    *
  4. *   2M-INFO 2.1  -  Pequeño programa de información sobre 2M.        *
  5. *                                                                    *
  6. *********************************************************************)
  7.  
  8. (*$A+,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-*)
  9.  
  10. uses
  11.   Dos, Crt;
  12.  
  13. const
  14.   ID_ESPACIO     = 1886; (* límite en las gráficas *)
  15.   ID_VELOCIDAD   = 4850;
  16.  
  17.   CM_CIRIT       = 14;   (* colores para la pantalla inicial/final *)
  18.   CM_CIRIP       =  4;
  19.   CM_2M          = 10;
  20.   CM_2MS         = 10;
  21.   CM_VERT        = 13;
  22.   CM_VERF        =  6;
  23.   CM_VERS        =  5;
  24.   CM_INFO        =  9;
  25.   CM_PAUSA       = 11;
  26.   CC_RECUERDO    = 12;
  27.   CC_DIR         = 14;
  28.  
  29.   CE_BARRADOST   = 11;   (* colores para la grafica de capacidad *)
  30.   CE_BARRADOSP   =  1;
  31.   CE_BARRA2MT    = 14;
  32.   CE_BARRA2MP    =  4;
  33.   CE_INDICE      = 13;
  34.   CE_TITULOT     = 11;
  35.   CE_TITULOP     =  1;
  36.   CE_NOTA        = 14;
  37.   CE_BASECOL     = 15;
  38.   CE_LEYENDAS    = 10;
  39.  
  40.   CV_BARRADOST   =  3;   (* colores para la grafica de velocidad *)
  41.   CV_BARRADOSP   =  1;
  42.   CV_BARRA2MT    = 12;
  43.   CV_BARRA2MP    =  6;
  44.   CV_INDICE      = 13;
  45.   CV_TITULOT     = 11;
  46.   CV_TITULOP     =  5;
  47.   CV_NOTA        = 14;
  48.   CV_BASECOL     = 15;
  49.   CV_LEYENDAS    = 10;
  50.  
  51.   M_FONDO        =  1;   (* color del menú *)
  52.   M_SOMBRA       =  3;
  53.   M_TINTA        = 15;
  54.   M_IDIOMA       = 11;
  55.   M_TBARRA       =  0;
  56.   M_FBARRA       =  7;
  57.  
  58.   R_CABT         = 14;   (* color para el readme *)
  59.   R_CABP         =  5;
  60.   R_TINTA        = 11;
  61.   R_PAPEL        =  0;
  62.   R_DIR          = 14;
  63.   R_BRILLO       = 10;
  64.  
  65.   N_CABT         = 14;   (* color de las novedades *)
  66.   N_CABP         =  4;
  67.   N_TINTA        = 11;
  68.   N_PAPEL        =  1;
  69.  
  70.   O2_TINTA       = 14;   (* color de las información de OS/2 *)
  71.   O2_PAPEL       =  1;
  72.  
  73.   XT_TINTA       = 15;   (* color de la información de PC/XT *)
  74.   XT_PAPEL       =  1;   
  75.  
  76.   I_2M1          = 15;   (* color para la información de registro *)
  77.   I_2M2          = 13;
  78.   I_FONDO        =  0;
  79.   I_CIRI         = 14;
  80.   I_FLECHA       = 12;
  81.   I_STAR         = 15;
  82.   I_REG          = 11;
  83.   I_REGTT        = 11;
  84.   I_REGTP        =  1;
  85.   I_CON          = 10;
  86.   I_CONT         = 14;
  87.  
  88.  
  89. type
  90.   Vram=array [1..4096] of Byte;  (* tamaño de la memoria de vídeo *)
  91.   Matriz=array [0..3] of array [0..2] of Integer;
  92.  
  93. var
  94.   xPrev,yPrev,      (* coordenadas del cursor previas al programa *)
  95.   modo:Byte;        (* modo de pantalla previo a este programa *)
  96.   ScrColor:Vram absolute $b800:0;  (* dirección memoria pantalla color *)
  97.   ScrMono: Vram absolute $b000:0;  (*    "        "        " monocroma *)
  98.   pantalla:Vram;                   (* para preservar memoria de vídeo *)
  99.   opcion,                          (* Opción del menú en curso *)
  100.   ultopc: Integer;                 
  101.   idioma: Integer;                 (* 34 si castellano *)
  102.  
  103.  
  104. function ModoPantalla:Byte;
  105. var
  106.   r:Registers;
  107. begin
  108.   r.ah:=15; intr(16,r);  (* función BIOS para averiguar modo de pantalla *)
  109.   ModoPantalla:=r.al;
  110. end;
  111.  
  112.  
  113. procedure GuardarPantalla;
  114. begin
  115.   modo:=ModoPantalla; (* inicializar aquí esta variable global *)
  116.   if modo=7 then pantalla:=ScrMono else pantalla:=ScrColor;
  117.   xPrev:=whereX; yPrev:=whereY;
  118.   if (modo<>2) and (modo<>3) then TextMode(CO80);
  119. end;
  120.  
  121.  
  122. procedure ReponerPantalla;
  123. begin
  124.   textMode(modo);
  125.   window(1,1,80,25); gotoXY(xPrev,yPrev);
  126.   if (modo<=3) or (modo=7) then
  127.     if ModoPantalla=7 then ScrMono:=pantalla else ScrColor:=pantalla;
  128. end;
  129.  
  130.  
  131. procedure CursorOff;
  132. var
  133.   r:Registers;
  134. begin
  135.   r.dh:=100; r.dl:=0; r.bh:=0; (* coordenadas fuera de pantalla *)
  136.   r.ah:=2; intr(16,r)  (* servicio del BIOS para localizar el cursor *)
  137. end;
  138.  
  139.  
  140. function sp:Boolean;
  141. var
  142.   r:     Registers;
  143.   id:    Byte;
  144.   datos: array[1..128] of byte;
  145. begin
  146.   if idioma<2 then begin     (* 0-evaluar, 1-invertir, 2-sp, 3-eng *)
  147.         r.ah:=$30; MsDos(r);
  148.         if r.al>=3 then begin  (* DOS = 3.0 *)
  149.           r.ax:=$3800; r.ds:=SEG(datos); r.dx:=OFS(datos); msdos (r);
  150.           case r.bx of
  151.             54, 591, 57, 506, 56, 593, 503, 34, 63, 502,
  152.             504, 212, 52, 505, 507, 595, 51, 80, 508, 598,
  153.             58, 3, 0: id:=34;
  154.           end
  155.         end;
  156.         if idioma=0 then if id=34 then idioma:=2 else idioma:=3;
  157.         if idioma=1 then if id=34 then idioma:=3 else idioma:=2;
  158.       end;
  159.   sp:=idioma=2;
  160. end;
  161.  
  162.  
  163. procedure Pausa;
  164. var
  165.   t:Char;
  166. begin
  167.   CursorOff;
  168.   t:=readkey; if t=chr(0) then t:=readkey;
  169. end;
  170.  
  171.  
  172. procedure PantallaGalactica (logo: Boolean);
  173. var
  174.   x: Integer;
  175. procedure escribir (cad: String);
  176. var
  177.   i:Integer;
  178. begin
  179.   gotoxy (8, WhereY);
  180.   for i:=1 to length(cad) do
  181.     case cad[i] of
  182.       ' ':            write (' ');
  183.       '.', '·':       begin TextColor(random(6)+10); write (cad[i]); end;
  184.       '▒':            if i<35 then
  185.                           begin TextColor(CM_2M); write ('▒'); end
  186.                         else
  187.                           begin TextColor(CM_VERT); TextBackGround(CM_VERF);
  188.                                 write ('▒'); TextBackGround(0); end;
  189.       '█', '▄', '▀':  if i<35 then
  190.                           begin TextColor(CM_2MS); write (cad[i]); end
  191.                         else
  192.                           begin TextColor(CM_VERS); write (cad[i]); end;
  193.     end;
  194.   writeLn;
  195. end; (* escribir *)
  196. begin
  197.   TextBackGround(0); ClrScr;
  198.   RandSeed:=7;
  199.   for x:=1 to 79 do begin
  200.       gotoXY (x,random(25)); TextColor(random(6)+2);  write('.');
  201.       gotoXY (x,random(25)); TextColor(random(6)+2);  write('·');
  202.       gotoXY (x,random(25)); TextColor(random(6)+10); write('.');
  203.       gotoXY (x,random(25)); TextColor(random(6)+10); write('·');
  204.       gotoXY (x,random(25)); TextColor(random(6)+10); write('·');
  205.     end;
  206.   if logo=TRUE then begin
  207.     gotoxy (1,6);
  208.     escribir('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄  ▒▒▒▒▄      ▒▒▒▒▄');
  209.     escribir('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█  ▒▒▒▒▒▄    ▒▒▒▒▒█');
  210.     escribir(' ▀▀▀▀▀▀▀▀▀▀▒▒▒▒█. ▒▒▒▒▒▒▄  ▒▒▒▒▒▒█');
  211.     escribir('    ·   .  ▒▒▒▒█  ▒▒▒▒▒▒▒▄▒▒▒▒▒▒▒█');
  212.     escribir(' ·     .   ▒▒▒▒█  ▒▒▒▒█▒▒▒▒▒█▒▒▒▒█');
  213.     escribir('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ ·▒▒▒▒█ ▒▒▒█▀▒▒▒▒█  .  ▒▒▒▒▒▒▒▒▒▒▄ .  ·   .▒▒▄');
  214.     escribir('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█  ▒▒▒▒█  ▒█▀ ▒▒▒▒█      ▀▀▀▀▀▀▀▒▒█       ▒▒▒▒█');
  215.     escribir('▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀  ▒▒▒▒█ . ▀  ▒▒▒▒█    .   ·    ▒▒█  ·  ▒▒▄▀▒▒█');
  216.     escribir('▒▒▒▒█  ·  . ·     ▒▒▒▒█  · . ▒▒▒▒█     ▒▒▒▒▒▒▒▒▒▒█ .    ▀▀ ▒▒█');
  217.     escribir('▒▒▒▒█   .       · ▒▒▒▒█ ·    ▒▒▒▒█  ·  ▒▒█▀▀▀▀▀▀▀▀   .    .▒▒█');
  218.     escribir('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄  ▒▒▒▒█   .· ▒▒▒▒█     ▒▒█ ·  .  ·       · ▒▒█');
  219.     escribir('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ .▒▒▒▒█  ·   ▒▒▒▒█   . ▒▒▒▒▒▒▒▒▒▒▄ ▒▒▄ ▒▒▒▒▒▒▒▒▒▒▄');
  220.     escribir(' ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀   ▀▀▀▀ ·  .  ▀▀▀▀ ·    ▀▀▀▀▀▀▀▀▀▀  ▀▀  ▀▀▀▀▀▀▀▀▀▀');
  221.     CursorOff;
  222.   end;
  223. end;
  224.  
  225.  
  226. procedure Presentacion;
  227. begin
  228.   gotoxy(10,3); TextColor (CM_CIRIT); TextBackGround (CM_CIRIP);
  229.   write(' C I R I A C O    G A R C I A    D E    C E L I S    ');
  230.   if sp then write('presenta ') else write('presents ');
  231.   gotoxy(6-ord(sp),21); TextColor (CM_INFO); TextBackGround(0);
  232.   if sp then
  233.       write('El formateador de discos de mayor capacidad y velocidad ... en el mundo')
  234.     else
  235.       write('The highest capacity formatter of faster diskettes ... over the world');
  236.   gotoxy(34-ord(sp)*2,24); TextColor (CM_PAUSA);
  237.   if sp then
  238.       write('(Pulsa una tecla)')
  239.     else
  240.       write('(Press any key)');
  241.   CursorOff;
  242. end;
  243.  
  244.  
  245. procedure menu (var opcion: Integer);
  246. var
  247.   i:Integer;
  248.   t:Char;
  249. procedure PintaOp (opcion: Integer);
  250. begin
  251.   gotoXY (3,opcion+1);
  252.   case opcion of
  253.     1: if sp then
  254.            write(' 1.- COMPARATIVA DE CAPACIDAD DE LOS DISQUETES 2M ')
  255.          else
  256.            write(' 1.- STORAGE COMPARISON BETWEEN 2M AND DOS FORMAT ');
  257.     2: if sp then
  258.            write(' 2.- COMPARATIVA DE VELOCIDAD DE LOS DISQUETES 2M ')
  259.          else
  260.            write(' 2.- SPEED COMPARISON BETWEEN 2M AND DOS FORMAT ');
  261.     3: if sp then
  262.            write(' 3.- 2M ES MUY FACIL DE USAR ')
  263.          else
  264.            write(' 3.- USING 2M IS VERY EASY ');
  265.     4: if sp then
  266.            write(' 4.- NOVEDADES DE ESTA VERSION ')
  267.          else
  268.            write(' 4.- WHAT IS NEW ON THIS RELEASE ');
  269.     5: if sp then
  270.            write(' 5.- USO DE 2M BAJO OS/2 2.0+ ')
  271.          else
  272.            write(' 5.- USING 2M UNDER OS/2 2.0+ ');
  273.     6: if sp then
  274.            write(' 6.- USO DE ALTA DENSIDAD Y 2M EN SISTEMAS PC/XT ')
  275.          else
  276.            write(' 6.- USING HIGH DENSITY AND 2M ON PC/XT COMPUTERS ');
  277.     7: if sp then
  278.            write(' 7.- LICENCIA DE USO DE ESTE PROGRAMA ')
  279.          else
  280.            write(' 7.- LICENSE TO USE THIS PROGRAM ');
  281.     8: if sp then
  282.            write(' 8.- SALIR ')
  283.          else
  284.            write(' 8.- EXIT ');
  285.   end
  286. end;
  287. begin  (* menu *)
  288.   if (opcion=9) then opcion:=ultopc else begin
  289.     opcion:=opcion+1;
  290.     Pantallagalactica (FALSE);
  291.     window (16,9,69,18); TextBackGround (M_SOMBRA); ClrScr;
  292.   end;
  293.   window (14,8,67,17);
  294.   TextBackGround (M_FONDO); TextColor (M_FONDO); ClrScr;
  295.   window (14,8,68,17);
  296.   write('┌'); for i:=1 to 52 do write('─'); write('┐');
  297.   for i:=2 to 9 do begin  (* sólo visible en MDA *)
  298.     gotoXY(1,i); write('│'); gotoXY(54,i); write('│');
  299.   end;
  300.   writeLn;
  301.   write('└'); for i:=1 to 52 do write('─'); write('┘');
  302.   TextColor (M_IDIOMA); gotoXY(42,10);
  303.   if sp then write('F9 - ENGLISH') else write('F9 - ESPAÑOL');
  304.   TextColor (M_TINTA); for i:=1 to 8 do PintaOp(i);
  305.   ultopc:=opcion;
  306.   repeat
  307.     TextColor (M_TBARRA); TextBackGround (M_FBARRA); PintaOp (opcion);
  308.     CursorOff;
  309.     t:=ReadKey; if ord(t)=0 then t:=ReadKey;
  310.     case ord(t) of
  311.       67:     begin opcion:=9; t:=chr(13); end;
  312.       72:     if (opcion>1) then opcion:=opcion-1 else opcion:=8;
  313.       80, 32: if (opcion<8) then opcion:=opcion+1 else opcion:=1;
  314.       71, 73: opcion:=1;
  315.       79, 81: opcion:=8;
  316.       27:     if opcion=8 then t:=chr(13) else opcion:=8;
  317.       else
  318.         if ((ord(t)>=49) and (ord(t)<=57)) then
  319.           begin opcion:=ord(t)-48; t:=chr(13); end;
  320.     end;
  321.   TextColor (M_TINTA); TextBackGround (M_FONDO);
  322.   PintaOp(ultopc); if (opcion<>9) then ultopc:=opcion;
  323.   until (ord(t)=13);
  324.   if (opcion<>9) then begin
  325.     window (1,1,80,25); TextBackGround(0); TextColor(15); ClrScr;
  326.   end;
  327. end;
  328.  
  329.  
  330. procedure readme;
  331. begin
  332.   TextColor(R_TINTA); TextBackGround(R_PAPEL); write('            ');
  333.   TextColor(R_CABT); TextBackGround(R_CABP);
  334.   if sp then
  335.       writeLn(' Sólo quiero decirte 3 cosas: ')
  336.     else
  337.       writeLn(' Only three things I want to tell you: ');
  338.   TextColor(R_TINTA); TextBackGround(R_PAPEL);
  339.   writeLn;
  340.   if sp then begin
  341.       writeLn('       - 2M  no es solo el formateador de mayor capacidad hasta el momento;');
  342.       writeLn('     los disquetes 2M son también los más rápidos (lee 2M-PERF.DOC para más');
  343.       writeLn('     información). Aviso: los disquetes ED de 2.88M NO HAN SIDO PROBADOS.');
  344.       writeLn;
  345.       writeLn('       - Los disquetes 2M son tan fiables como los de 360-1.2-720-1.44-2.88');
  346.       writeLn('     del sistema,  el secreto es un mayor tamaño de sector (así, el espacio');
  347.       writeLn('     empleado por los GAP entre sectores es menor al haber menos sectores).');
  348.       writeLn('     Es mejor emplear los formatos estándar (820-1476-984-1804-3608). No es');
  349.       writeLn('     recomendable emplear los formatos máximos (902-1558-1066-1886-3772) al');
  350.       writeLn('     ser menos seguros (los GAP son muy pequeños) y muchísimo más lentos.');
  351.       writeLn;
  352.       TextColor(R_BRILLO);
  353.       writeLn('       - 2M es fácil de usar.  Simplemente, ejecútalo en tu AT (normalmente');
  354.       writeLn('     desde el autoexec.bat) para que se quede en memoria (o 2M.SYS desde el');
  355.       writeLn('     config.sys) y si aún no tienes un disco 2M, créalo con 2MF A: o 2MF B:');
  356.       TextColor(R_TINTA);
  357.       writeLn;
  358.       writeLn('     Para cualquier cuestión/comentario... Email > Internet: ciri@gui.uva.es');
  359.       writeLn('                                                 > Fidonet:  2:341/21.8');
  360.       write('     Mi dirección:  '); TextColor(R_DIR);
  361.       writeLn('Ciriaco García de Celis');
  362.       writeLn('                       C/Renedo, 2, 4-C'); TextColor (R_DIR);
  363.       write('                       47005 Valladolid'); TextColor (R_TINTA); writeLn('    «Recuerda: Yo digo "2M es seguro",');
  364.       TextColor (R_DIR);
  365.       write('                           (ESPAÑA)'); TextColor (R_TINTA); writeLn('         ¡y yo solo uso disquetes 3M!» :)');
  366.     end else begin
  367.       writeLn('       - 2M  is not only the highest capacity formatter at this moment,  but');
  368.       writeLn('     also  2M  diskettes  are  the  fastest  ones (see  2M-PERF.DOC for more');
  369.       writeLn('     information). Note that 2.88M ED diskettes HAVE NOT BEEN TESTED.');
  370.       writeLn;
  371.       writeLn('       - 2M diskettes are as reliable as DOS standard 360-1.2-720-1.44-2.88;');
  372.       writeLn('     the secret is a greater sector size (space used by GAPs between sectors');
  373.       writeLn('     is lower because the number of sectors is lower).  I  always  recommend');
  374.       writeLn('     the standard formats  (820-1476-984-1804-3608).  You should not use the');
  375.       writeLn('     maximum  capacity  formats  (902-1558-1066-1886-3772), because they are');
  376.       writeLn('     less reliable (GAPs are very small) and too much slower.');
  377.       writeLn;
  378.       TextColor(R_BRILLO);
  379.       writeLn('       - 2M is easy to use.  Simply  execute 2M on your AT computer (usually');
  380.       writeLn('     from autoexec.bat) to install 2M on memory  (or 2M.SYS from config.sys)');
  381.       writeLn('     and, if you don''t have a 2M diskette, make it with 2MF A: or 2MF B:');
  382.       TextColor(R_TINTA);
  383.       writeLn;
  384.       writeLn('     For any questions or comments, E-mail me at > Internet: ciri@gui.uva.es');
  385.       writeLn('                                                 > Fidonet:  2:341/21.8');
  386.       write('     or Mail me at: '); TextColor(R_DIR);
  387.       writeLn('Ciriaco García de Celis');
  388.       writeLn('                       C/Renedo, 2, 4-C'); TextColor (R_DIR);
  389.       write('                       47005 Valladolid'); TextColor (R_TINTA); writeLn('    «Remember: I say "2M is secure",');
  390.       TextColor (R_DIR);
  391.       write('                           (SPAIN)'); TextColor (R_TINTA); writeLn('         and I only use 3M diskettes!» :)');
  392.     end;
  393. end;
  394.  
  395.  
  396. procedure Nuevo2M;
  397. begin
  398.   TextColor(N_TINTA); TextBackGround(N_PAPEL); ClrScr;
  399.   if sp then begin
  400.       WriteLn; write('            ');
  401.       TextColor(N_CABT); TextBackGround(N_CABP);
  402.       writeLn(' LA VERSION 2.1 DE 2M AÑADE A LAS VERSIONES 2.0 Y 1.3 ');
  403.       TextColor(N_TINTA); TextBackGround(N_PAPEL);
  404.       writeLn;
  405.       writeLn('  + En los disquetes de las versiones anteriores a la 2.0 se permite alterar');
  406.       writeLn('    de nuevo el sector de arranque, dentro de ciertos límites,  mejorando la');
  407.       writeLn('    compatibilidad con ciertas utilidades (los disquetes de la versión 2.0 y');
  408.       writeLn('    posteriores poseen un arranque virtual totalmente modificable).');
  409.       writeLn('  + 2M-ABIOS y 2M-XBIOS actualizan la información DOS acerca del tipo de las');
  410.       writeLn('    unidades, con lo que la totalidad del software  (no sólo el que accede a');
  411.       writeLn('    nivel BIOS) conoce correctamente su tipo.  Con FORMAT ya no es necesario');
  412.       writeLn('    ahora en ningún caso indicar el número de pistas o sectores.');
  413.       writeLn('  + Corregido un fallo de DMA que podía colgar el PC en la instalación de 2M.');
  414.       writeLn;
  415.       TextColor(N_TINTA); TextBackGround(N_PAPEL); write('                ');
  416.       TextColor(N_CABT); TextBackGround(N_CABP);
  417.       writeLn(' LA VERSION 2.0 DE 2M AÑADIO A LA VERSION 1.3 ');
  418.       TextColor(N_TINTA); TextBackGround(N_PAPEL);
  419.       writeLn;
  420.       writeLn('  + Los disquetes 2M pueden ser empleados sin 2M.COM ni 2M.SYS instalados en');
  421.       writeLn('    el disco duro, si son de alta densidad (ver 2MF /?).');
  422.       writeLn('  + Los disquetes 2M soportan el comando SYS y pueden ser botables si son de');
  423.       writeLn('    alta densidad, gracias al código SuperBOOT y al arranque virtual.');
  424.       writeLn('  + La utilidad SecureDrive 1.3d de (entre otros autores) Edgar Swank (USA),');
  425.       writeLn('    trabaja correctamente con disquetes 2M gracias a la valiosa contribución');
  426.       writeLn('    de Edgar Swank encontrando y corrigiendo fallos en el listado de 2M.');
  427.       writeLn('  + Nuevos formatos de disco para 2.88M');
  428.       writeLn('  + Soporte total para alta densidad en PC/XT (discos estándar y 2M).');
  429.     end else begin
  430.       WriteLn; write('            ');
  431.       TextColor(N_CABT); TextBackGround(N_CABP);
  432.       writeLn(' THE 2.1 RELEASE OF 2M ADDS TO 2.0 AND 1.3 RELEASE ');
  433.       TextColor(N_TINTA); TextBackGround(N_PAPEL);
  434.       writeLn;
  435.       writeLn('  + In 2M diskettes prior to 2.0 release it is allowed again to modify some');
  436.       writeLn('    fields of boot record, within some reasonable limits,  in  order to get');
  437.       writeLn('    more compatibility with some utilities (2M 2.0 diskettes and successive');
  438.       writeLn('    have a virtual boot sector which can be completely modified).');
  439.       writeLn('  + Now, 2M-ABIOS and 2M-XBIOS set the DOS disk drives type info;  so, most');
  440.       writeLn('    software  (not only at BIOS access level)  can detect now correctly the');
  441.       writeLn('    diskette types. For example, with FORMAT it is not necessary to set the');
  442.       writeLn('    number of tracks or sectors per track.');
  443.       writeLn('  + A DMA problem that could hang system while loading 2M has been fixed.');
  444.       writeLn;
  445.       TextColor(N_TINTA); TextBackGround(N_PAPEL); write('                ');
  446.       TextColor(N_CABT); TextBackGround(N_CABP);
  447.       writeLn(' THE 2.0 RELEASE OF 2M ADDED TO 1.3 RELEASE ');
  448.       TextColor(N_TINTA); TextBackGround(N_PAPEL);
  449.       writeLn;
  450.       writeLn('  + 2M diskettes can be used on computers without 2M.COM or 2M.SYS installed');
  451.       writeLn('    on hard disk (only high density ones, see 2MF /? for more information).');
  452.       writeLn('  + DOS standard SYS command is now able to make full bootable 2M diskettes,');
  453.       writeLn('    in the new 2M SuperBOOT mode, using a virtual boot sector.');
  454.       writeLn('  + SecureDrive 1.3d program from (between others)  Edgar Swank (USA)  works');
  455.       writeLn('    now correctly with 2M 2.0 diskettes, due to the valuable contribution of');
  456.       writeLn('    Edgar Swank finding and correcting bugs in 2M source code.');
  457.       writeLn('  + New 2.88M diskettes support added.');
  458.       writeLn('  + PC/XT systems full high density support (DOS standard and 2M diskettes).');
  459.     end;
  460. end;
  461.  
  462.  
  463. procedure UsoOS2;
  464. begin
  465.   window(1,2,80,24);
  466.   TextColor(O2_TINTA); TextBackGround(O2_PAPEL); ClrScr;
  467.   if sp then begin
  468.       writeLn;
  469.       writeLn('    OS/2  puede trabajar con 2M siempre que se cargue el DOS desde un disquete,');
  470.       writeLn('  desde una partición tipo DOS, o desde un fichero imagen de un disquete DOS de');
  471.       writeLn('  arranque que se puede crear con la utilidad VMDISK de OS/2. En estas ventanas');
  472.       writeLn('  DOS se puede acceder a las particiones HPFS,  instalando  en el CONFIG.SYS la');
  473.       writeLn('  utilidad FSFILTER.SYS;  además,  este driver es necesario para poder escribir');
  474.       writeLn('  sobre las particiones FAT ordinarias.  Después,  con FSACCESS se podría hacer');
  475.       writeLn('  que A: vuelva a ser la disquetera (si se ha arrancado de un fichero imagen).');
  476.       writeLn;
  477.       writeLn('    Sin embargo, FSFILTER anula las llamadas del DOS a la BIOS de disco, motivo');
  478.       writeLn('  por el cual el código residente de 2M no puede trabajar. Para solucionar este');
  479.       writeLn('  fallo, hay que instalar después DRIVER.SYS en el CONFIG.SYS para cada unidad:');
  480.       writeLn;
  481.       writeLn('                DEVICE=DRIVER.SYS /D:n  (n=0 para A:, 1 para B:...)');
  482.       writeLn;
  483.       writeLn('    Desde ese momento se podrá acceder a los disquetes 2M en esas ventanas  DOS');
  484.       writeLn('  a través de las nuevas unidades lógicas creadas,  aunque  para  formatear con');
  485.       writeLn('  2MF será necesario indicar A: o B: como siempre.  Cuando  un  disquete  2M no');
  486.       writeLn('  está siendo accedido, es conveniente retirarlo de la unidad,  para evitar que');
  487.       writeLn('  una de las periódicas inspecciones que OS/2  realiza  sobre  las  disqueteras');
  488.       writeLn('  detenidas  pueda  colapsar la ventana  (aunque sólo se detendría hasta que el');
  489.       writeLn('  usuario retirase el disquete).');
  490.     end else begin
  491.       writeLn;
  492.       writeLn('    OS/2 can work with 2M while using DOS from diskette drive,  from a DOS hard');
  493.       writeLn('  disk partition,  or booting DOS from DOS boot disk file image created by OS/2');
  494.       writeLn('  VMDISK utility.  In these DOS windows, the HPFS partitions can be accessed by');
  495.       writeLn('  installing the FSFILTER.SYS driver in CONFIG.SYS;  this driver is also needed');
  496.       writeLn('  to write on FAT partitions.  After installing FSFILTER,  FSACCESS can be used');
  497.       writeLn('  to  make  A:  corresponding to the real disk drive if boot has been done from');
  498.       writeLn('  disk file image.');
  499.       writeLn;
  500.       writeLn('    But FSFILTER overrides DOS calls to disk BIOS routines:  the  resident code');
  501.       writeLn('  of 2M can not work in this mode.  To  solve  this problem,  you  can  install');
  502.       writeLn('  DRIVER.SYS program in CONFIG.SYS for each diskette drive:');
  503.       writeLn;
  504.       writeLn('               DEVICE=DRIVER.SYS /D:n  (n=0 para A:, 1 para B:...)');
  505.       writeLn;
  506.       writeLn('    From now on,  in these DOS windows,  diskette drives can be accesed through');
  507.       writeLn('  the new drive letters assigned by DRIVER.SYS, but for 2MF format the original');
  508.       writeLn('  ones (A: and B:) must be selected. While 2M diskette isn''t being used it must');
  509.       writeLn('  be retired from diskette drive in order to avoid the OS/2 periodical diskette');
  510.       writeLn('  drives inspection when drives are stopped.  Otherwise, the DOS window may get');
  511.       writeLn('  colapsed,  although when user will retire the diskette, it will turn into the');
  512.       writeLn('  normal function.');
  513.     end;
  514.   window(1,1,80,25);
  515. end;
  516.  
  517.  
  518. procedure UsoPCXT;
  519. begin
  520.   TextColor(XT_TINTA); TextBackGround(XT_PAPEL); ClrScr;
  521.   if sp then begin
  522.       writeLn;
  523.       writeLn('    2MX permite trabajar en PC/XT equipados con controladoras de alta densidad,');
  524.       writeLn('  tales como Amstrad 2086 u Olivetti Cuaderno. El único requisito es equiparlos');
  525.       writeLn('  también con una unidad de alta densidad si no la incorporaban de fábrica.');
  526.       writeLn;
  527.       writeLn('    En las demás máquinas PC/XT se puede sustituir la controladora de disquetes');
  528.       writeLn('  por otra de AT (incluso de 16 bits; no importa que quede la mitad de la misma');
  529.       writeLn('  sin insertar en el slot de expansión; se pueden deshabilitar las funciones no');
  530.       writeLn('  necesarias con los «jumpers» adecuados, aunque ni eso es necesario).');
  531.       writeLn;
  532.       writeLn('    Si la BIOS no soporta alta densidad, caso más probable si se ha añadido una');
  533.       writeLn('  controladora de AT, habrá que cargar 2M-XBIOS antes que 2MX, y disponer de un');
  534.       writeLn('  disco duro o de una unidad A: de doble densidad de donde poder arrancar el PC');
  535.       writeLn('  al principio.  Este programa moderniza y agiliza el acceso a disco incluso en');
  536.       writeLn('  máquinas con controladoras de doble densidad,  constituyendo por sí mismo una');
  537.       writeLn('  opción interesante. 2M-XBIOS sustituye por completo a la BIOS original del PC');
  538.       writeLn('  en las tareas de control de disquetes,  por lo que debe ser instalado siempre');
  539.       writeLn('  antes que cualquier otro residente que acceda al disco (para no anularlo).');
  540.       writeLn;
  541.       writeLn('    Con 2MX se podrá además acceder a los disquetes 2M sin limitaciones.  Si la');
  542.       writeLn('  máquina  posee  un  conmutador de turbo, al cambiar la velocidad de la CPU se');
  543.       writeLn('  afecta al normal funcionamiento de 2M-XBIOS y 2MX. Si hubiera problemas en el');
  544.       writeLn('  acceso a disco,  se pueden ejecutar estos programas en cualquier momento para');
  545.       writeLn('  actualizar las constantes internas de retardo a la velocidad actual del PC.');
  546.     end else begin
  547.       writeLn;
  548.       writeLn('    2MX improves 2M diskettes support for your PC/XT, if it has an high density');
  549.       writeLn('  diskette controller, as Amstrad 2086 or Olivetti Cuaderno.  All what you need');
  550.       writeLn('  is to install an high density drive if the original one is double density.');
  551.       writeLn;
  552.       writeLn('    In the rest of PC/XT machines, the diskette controller can be replaced by a');
  553.       writeLn('  AT controller (if to find a PC/XT high density card is difficult).  There  is');
  554.       writeLn('  no problem with 16-bit cards: insert only half card on the expansion slot and');
  555.       writeLn('  disable the unused functions with jumpers (often this is neither necessary).');
  556.       writeLn;
  557.       writeLn('    If BIOS don''t support high density (the most common situation when adding a');
  558.       writeLn('  AT high density controller) then it is necessary to load 2M-XBIOS before 2MX,');
  559.       writeLn('  and the machine must be equiped with a hard disk or a double density drive A:');
  560.       writeLn('  where  boot  from  at start up time.  This program upgrades and improves disk');
  561.       writeLn('  access techniques,  also with double density drives and controllers, so it is');
  562.       writeLn('  an interesting option by itself. 2M-XBIOS replaces the complete original BIOS');
  563.       writeLn('  diskette functions;  it  always must be installed before the rest of diskette');
  564.       writeLn('  TSR software (to avoid override them).');
  565.       writeLn;
  566.       writeLn('    With 2MX loaded on memory 2M diskettes can be used with no restrictions. If');
  567.       writeLn('  the computer has a turbo switch,  changing  the  CPU speed may cause abnormal');
  568.       writeLn('  function  on  2M-XBIOS  and 2MX.  If you detect  any  problem in disk access,');
  569.       writeLn('  this  programs  can  be  executed  in any moment to update the internal delay');
  570.       writeLn('  constants to the current system speed.');
  571.     end;
  572. end;
  573.  
  574.  
  575. procedure Licencia;
  576. procedure pr(color2m: Integer; cadena:String);
  577. var
  578.   i:Integer;
  579. begin
  580.   for i:=1 to length(cadena) do begin
  581.     if i=1  then TextColor(I_REG);
  582.     if i=34 then TextColor(color2m);
  583.     if i=52 then TextColor(I_CON);
  584.     write(cadena[i]);
  585.   end;
  586.   writeLn;
  587. end;
  588. begin
  589.   TextColor(I_REGTT); TextBackGround(I_FONDO);
  590.   writeLn; write('    '); TextBackGround(I_REGTP);
  591.   if sp then begin
  592.       writeLn(' INFORMACION DE REGISTRO ');
  593.       TextBackGround(I_FONDO); TextColor(I_2M1);
  594.       write('                                  ▀▀▀▀▀██  █     █'); TextColor(I_CONT); writeLn('    Condiciones del contrato:');
  595.       pr(I_2M2,'  2M no es un programa gratuito,       ██  ██   ██  - No modificar el programa,');
  596.       pr(I_2M1,'sino un programa CARDWARE.  Esto       ██  ██▄ ▄██    excepto para uso propio.');
  597.       pr(I_2M2,'quiere decir que  si usted ya lo       ██  ███ ███  - Distribuirlo  siempre  de');
  598.       pr(I_2M1,'utilizaba o piensa hacerlo desde       ██  ██ █ ██    manera gratuíta.');
  599.       pr(I_2M2,'ahora,  además  de aceptar todas  ▄▄▄▄▄██  ██ ▀ ██  - No distribuyendo completo');
  600.       pr(I_2M1,'las condiciones,  debe  enviarme  ██       ██   ██    todo el paquete indíquese');
  601.       pr(I_2M2,'una tarjeta postal  desde  donde  ██       ██   ██    la manera de obtenerlo.');
  602.       pr(I_2M1,'vive (no envíe dinero) a:         ██       ██   ██  - El autor no asume ninguna');
  603.       pr(I_2M2,'                                  ██       ██   ██    garantía, ni es responsa-');
  604.       pr(I_2M1,'    Ciriaco García de Celis       ██       ██   ██    ble de los fallos y daños');
  605.       pr(I_2M2,'       C/Renedo, 2, 4-C           ██▄▄▄▄▄  ██   ██    que pudieran ocasionarse.');
  606.       pr(I_2M1,'       47005 Valladolid                             - Enviar la tarjeta postal.');
  607.       pr(I_2M2,'           (ESPAÑA)');
  608.     end else begin
  609.       writeLn(' «REGISTER» INFORMATION ');
  610.       TextBackGround(I_FONDO); TextColor(I_2M1);
  611.          write('                                  ▀▀▀▀▀██  █     █'); TextColor(I_CONT); writeLn('      Contract conditions:');
  612.       pr(I_2M2,'  2M  is  not a freeware program       ██  ██   ██  - Do not modify the program');
  613.       pr(I_2M1,'but it is CARDWARE.  This  means       ██  ██▄ ▄██    except for personal use.');
  614.       pr(I_2M2,'that if you are already using it       ██  ███ ███  - Distribute it always with');
  615.       pr(I_2M1,'or you decide to use it from now       ██  ██ █ ██    no charge.');
  616.       pr(I_2M2,'on, then you must agree with all  ▄▄▄▄▄██  ██ ▀ ██  - If you do not  distribute');
  617.       pr(I_2M1,'contract conditions and you must  ██       ██   ██    the whole ZIP you have to');
  618.       pr(I_2M2,'send me a postcard from the pla-  ██       ██   ██    tell where to get it from');
  619.       pr(I_2M1,'ce you live (do not send money):  ██       ██   ██  - The author doesn''t assume');
  620.       pr(I_2M2,'                                  ██       ██   ██    any  warranty  about  any');
  621.       pr(I_2M1,'    Ciriaco García de Celis       ██       ██   ██    possible damage / failure');
  622.       pr(I_2M2,'       C/Renedo, 2, 4-C           ██▄▄▄▄▄  ██   ██    caused by this program.');
  623.       pr(I_2M1,'       47005 Valladolid                             - You must send me a card.');
  624.       pr(I_2M2,'           (SPAIN)');
  625.     end;
  626.   TextColor(I_FLECHA);
  627.   writeLn('                                                                          ▀▄');
  628.   writeLn('                ▄ ▄ ▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█▄');
  629.   writeLn('                                                                           ▄▀');
  630.   TextColor(I_CIRI);
  631.   write('         ▄▄▄▄▄▄▄                 ▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄');
  632.   TextColor(I_STAR); write('─┼─');
  633.   TextColor(I_FLECHA); writeLn('    ▀'); TextColor(I_CIRI);
  634.   writeLn('         █        ▄          ▄   █        █    ██  █           █');
  635.   writeLn('         █▄       ▄   ▄▄▄▄▄  ▄   █▄▄▄▄▄▄  █     █  █▄▄▄▄       █▄');
  636.   writeLn('         ██       █▄  █▄     █▄       ▄█  █     █  █▄          ██');
  637.   writeLn('         ██▄▄▄▄▄  ██  ██     ██  ▄▄▄▄▄██  █▄▄▄▄▄█  ██          ██');
  638. end;
  639.  
  640.  
  641. Procedure MensajeCardware;
  642. begin
  643.   TextColor (CC_RECUERDO); TextBackGround(0);
  644.   gotoxy(12-ord(sp)*3,21);
  645.   if sp then
  646.       write('2M es CARDWARE. Por favor, recuerde enviar una tarjeta postal a:')
  647.     else
  648.       write('2M is CARDWARE. Please, remember to mail me a postcard at:');
  649.   TextColor (CC_DIR);
  650.   gotoxy(30,22); write('Ciriaco García de Celis');
  651.   gotoxy(34,23); write('C/Renedo, 2, 4-C');
  652.   gotoxy(30-ord(sp),24); write('47005 Valladolid ');
  653.   if sp then write ('(España)') else write ('(Spain)');
  654.   CursorOff;
  655. end;
  656.  
  657.  
  658. procedure Grafica (id, ctI, cpI, ctD, cpD, cI, cB: Integer; datos:Matriz);
  659. var
  660.   disco, columna, altura, x, maxx: Integer;
  661. begin
  662.   TextBackGround (0); ClrScr;
  663.   for disco:=0 to 3 do
  664.     for columna:=0 to 1 do begin
  665.       if columna=0 then begin
  666.           TextColor (ctI); textBackGround (cpI); end
  667.         else begin
  668.           TextColor (ctD); textBackGround (cpD); end;
  669.       for altura:=0 to round(datos[disco,columna]/(id/20.0)) do begin
  670.         maxx:=7+disco*18+columna*6;
  671.         for x:=maxx to maxx+4 do begin
  672.           gotoxy (x, 22-altura);
  673.           if columna=0 then write('░') else write('▒');
  674.           end;
  675.         end;
  676.       TextBackGround(0); TextColor (cI);
  677.       if (columna=0) or (id=ID_VELOCIDAD) then begin
  678.           gotoxy (maxx, 21-altura);
  679.           if (id=ID_ESPACIO) then
  680.               write(datos[disco, columna]:5)
  681.             else
  682.               write(datos[disco, columna]/100:2:2);
  683.           end
  684.         else begin
  685.           gotoxy (maxx-2, 21-altura);
  686.           write(datos[disco, columna+1]:4,'/',datos[disco, columna]); end
  687.     end;
  688.   TextColor (ctI); textBackGround (cpI);
  689.   gotoxy(7,25); write('░░');
  690.   TextColor (ctD); textBackGround (cpD);
  691.   gotoxy(26,25); write('▒▒');
  692.   TextBackGround(0); gotoxy (10,23); TextColor (cB);
  693.   write('5¼-DD             5¼-HD             3½-DD             3½-HD');
  694. end;
  695.  
  696.  
  697. procedure GraficaEspacio;
  698. var
  699.   datos : Matriz;
  700. begin
  701.   datos[0,0]:= 360; datos[0,1]:= 902; datos[0,2]:= 820;
  702.   datos[1,0]:=1200; datos[1,1]:=1558; datos[1,2]:=1476;
  703.   datos[2,0]:= 720; datos[2,1]:=1066; datos[2,2]:= 984;
  704.   datos[3,0]:=1440; datos[3,1]:=1886; datos[3,2]:=1804;
  705.   Grafica (ID_ESPACIO, CE_BARRADOST, CE_BARRADOSP, CE_BARRA2MT,
  706.            CE_BARRA2MP, CE_INDICE, CE_BASECOL, datos);
  707.   TextBackGround(CE_TITULOP); TextColor(CE_TITULOT);
  708.   gotoxy (3,1); if sp then write('┌───────────┐') else write('┌──────────┐');
  709.   gotoxy (3,2); if sp then write('│ CAPACIDAD │') else write('│   DISK   │');
  710.   gotoxy (3,3); if sp then write('│ DEL DISCO │') else write('│ CAPACITY │');
  711.   gotoxy (3,4); if sp then write('└───────────┘') else write('└──────────┘');
  712.   TextBackGround(0); TextColor (CE_NOTA);
  713.   gotoxy (4,6); if sp then write (' En') else write('In'); write(' Kbytes');
  714.   TextColor(CE_LEYENDAS);
  715.   gotoxy (10,25);
  716.   if sp then write('FORMAT') else write('DOS FORMAT');
  717.   gotoxy (29,25);
  718.   if sp then write('2M Normal/Máxima') else write('2M Normal/Maximum');
  719.   gotoxy (57-ord(sp)*2,25);
  720.   if sp then write('(Pulsa una tecla)') else write('(Press any Key)');
  721. end;
  722.  
  723.  
  724. procedure GraficaVelocidad;
  725. var
  726.   datos:Matriz;
  727. begin
  728.   datos[0,0]:=1816; datos[0,1]:=2502;
  729.   datos[1,0]:=3013; datos[1,1]:=4633;
  730.   datos[2,0]:=1505; datos[2,1]:=2574;
  731.   datos[3,0]:=3014; datos[3,1]:=4850;
  732.   Grafica (ID_VELOCIDAD, CV_BARRADOST, CV_BARRADOSP, CV_BARRA2MT,
  733.            CV_BARRA2MP, CV_INDICE, CV_BASECOL, datos);
  734.   TextBackGround(CV_TITULOP); TextColor(CV_TITULOT);
  735.   gotoxy (4,1);            write('┌─────────────┐');
  736.   gotoxy (4,2); if sp then write('│ VELOCIDAD A │') else write('│ BIOS  LEVEL │');
  737.   gotoxy (4,3); if sp then write('│ NIVEL  BIOS │') else write('│ PERFORMANCE │');
  738.   gotoxy (4,4);            write('└─────────────┘');
  739.   TextBackGround(0); TextColor (CV_NOTA);
  740.   gotoxy (3,6);
  741.   if sp then write('Tasa de transferencia') else write('Data transfer rate');
  742.   gotoxy (3,7);
  743.   if sp then write('  en Kbytes/segundo') else write(' in Kbytes/second');
  744.   TextColor(CV_LEYENDAS);
  745.   gotoxy (10,25);
  746.   if sp then write('FORMAT') else write('DOS FORMAT');
  747.   gotoxy (29,25);
  748.   if sp then write('Disquete 2M normal') else write('2M Normal Diskette');
  749.   gotoxy (57-ord(sp)*2,25);
  750.   if sp then write('(Pulsa una tecla)') else write('(Press any Key)');
  751. end;
  752.  
  753.  
  754. procedure SonidoEstelar;
  755. var
  756.   i,j,z:Integer;
  757.  
  758. procedure eco_sube;
  759. begin
  760.   i:=25;
  761.   repeat
  762.     sound(i+1000); delay(1); sound (i); delay(1); i:=i+5;
  763.   until (i>5000) or KeyPressed;
  764.   nosound;
  765. end;
  766.  
  767. procedure eco_baja;
  768. begin
  769.   i:=2500;
  770.   repeat
  771.     sound(i+1000); delay(1); sound (i); delay(1); i:=i-2;
  772.   until (i<500) or KeyPressed;
  773. end;
  774.  
  775. procedure eco_desploma;
  776. begin
  777.   repeat
  778.     sound(i+1000); delay(1); sound (i); delay(1); i:=i-1;
  779.   until (i<25) or KeyPressed;
  780.   nosound;
  781. end;
  782.  
  783. begin (* SonidoEstelar *)
  784.   eco_sube; eco_baja; eco_desploma;
  785.   i:=25;
  786.   repeat
  787.     sound(i); delay(1); sound (i+2000); delay(1); i:=i+2;
  788.   until (i>2000) or KeyPressed;
  789.   nosound;
  790.   i:=500;
  791.   for z:=1 to 2 do begin
  792.     repeat
  793.       sound(i); delay(1); sound (i+3000); delay(1);
  794.        sound (i+1500); delay(1); i:=i+1;
  795.     until (i>2000) or KeyPressed;
  796.     nosound;
  797.   end;
  798.   eco_baja; eco_desploma; eco_sube; eco_baja; eco_desploma;
  799.   i:=700; eco_desploma; i:=1000; eco_desploma; i:=2000; eco_desploma;
  800. end;
  801.  
  802.  
  803. begin
  804.   idioma:=0;                      (* idioma aún sin determinar *)
  805.   if (ParamCount>0) then
  806.     if (ParamStr(1)='/I') or (ParamStr(1)='/i') then idioma:=1;
  807.   GuardarPantalla;
  808.   PantallaGalactica (TRUE);
  809.   Presentacion;
  810.   while not KeyPressed do SonidoEstelar;
  811.   Pausa;
  812.  
  813.   opcion:=0;
  814.   repeat
  815.     Menu (opcion);
  816.     case opcion of
  817.       1: GraficaEspacio;
  818.       2: GraficaVelocidad;
  819.       3: Readme;
  820.       4: Nuevo2M;
  821.       5: UsoOS2;
  822.       6: UsoPCXT;
  823.       7: Licencia;
  824.       9: idioma:=idioma XOR 1; (* F9 *)
  825.     end;
  826.     if (opcion<8) then Pausa;
  827.   until opcion=8;
  828.  
  829.   PantallaGalactica (TRUE);
  830.   MensajeCardware;
  831.   SonidoEstelar;
  832.   if KeyPressed then Pausa;
  833.   ReponerPantalla;
  834. end.
  835.